Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | const bcrypt = require('bcryptjs'); const JwtService = require('../../services/JwtService'); const jwtService = new JwtService(); /** * Register User Command Handler * Handles user registration business logic */ class RegisterUserCommandHandler { constructor(prisma, emailService) { this.prisma = prisma; this.emailService = emailService; } /** * Execute user registration command * @param {RegisterUserCommand} command * @returns {Promise<Object>} { user, token } */ async handle(command) { const { name, email, password } = command; // Validáció if (!name || !email || !password) { throw new Error('Name, email and password are required'); } if (password.length < 6) { throw new Error('Password must be at least 6 characters long'); } // Email formátum ellenőrzés const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { throw new Error('Invalid email format'); } // Ellenőrizzük, hogy létezik-e már a user const existingUser = await this.prisma.user.findUnique({ where: { email } }); if (existingUser) { throw new Error('User with this email already exists'); } // Jelszó hashelése (bcrypt) const hashedPassword = await bcrypt.hash(password, 10); // User létrehozása const user = await this.prisma.user.create({ data: { name, email, password: hashedPassword } }); // Welcome email küldése (async, nem várunk rá) if (this.emailService) { this.emailService.sendWelcomeEmail(email, name).catch(err => { console.error('❌ Failed to send welcome email:', err.message); }); } // JWT token generálása const token = jwtService.generateToken({ userId: user.id, email: user.email }); // Jelszót ne adjuk vissza a response-ban const { password: _, ...userWithoutPassword } = user; return { user: userWithoutPassword, token }; } } module.exports = RegisterUserCommandHandler; |